package cn.biplam.front.template.base;

import cn.biplam.common.wrapper.ErrorMessage;
import cn.biplam.common.wrapper.KvMap;
import cn.biplam.common.wrapper.sqlresult.SqlResult;
import cn.biplam.front.html.HtmlDiv;
import cn.biplam.front.html.HtmlValue;
import cn.biplam.front.html.base.HtmlWindow;
import cn.biplam.front.template.Template;
import cn.biplam.front.template.base.CheckBox.Layout_Type;

/**
 * 复选框组<BR>
 * 返回变量名是CheckBoxGroup.name+"value"<BR>
 * 返回值是"#"分割的选择项ID字符串,没有选中的选择项ID不出现<BR>
 */
public class CheckBoxGroup implements Template {
	
	private String name;
	private String sHomeUrl;
	private HtmlWindow checkBoxGroup;
	private KvMap<Integer,String[]> checkBoxs;
	private Layout_Type type;
	private int iCount=0;
	private int width;
	
	/**
	 * 构造函数 默认横排
	 * @param name 		复选框的名字
	 * @param sHomeUrl 	系统路径
	 */
	public CheckBoxGroup(String name,String sHomeUrl){
		this(name,sHomeUrl,Layout_Type.Horizontal);
	}
	
	/**
	 * 构造函数 
	 * @param name 		复选框的名字
	 * @param sHomeUrl 	系统路径
	 * @param 排版类型
	 */
	public CheckBoxGroup(String name,String sHomeUrl,Layout_Type type){
		this.name = name;
		this.sHomeUrl = sHomeUrl;
		this.checkBoxs = new KvMap<Integer,String[]>();
		this.checkBoxGroup = new HtmlDiv(name);
		this.type = type;
	}
	
	/**
	 * 设置复选框的内容
	 * @param optionId  复选框选项对应的对象id
	 * @param optionText 复选框选项对应的对象说明
	 * @throws ErrorMessage
	 */
	public void set(String optionId,String optionText) throws ErrorMessage{
		this.checkBoxs.put(this.iCount,new String[]{optionId,optionText});
		this.iCount++;
	}
	
	/**
	 * * 设置复选框的内容
	 * @param sr SqlResult 数据源
	 * @param optionIdName SqlResult中选项id的列名
	 * @param optionTextName SqlResult中选项说明的列名
	 * @throws ErrorMessage  
	 */
	public void set(SqlResult sr,String optionIdName,String optionTextName) throws ErrorMessage{
		if(sr!=null){
			for(int i=0;i<sr.size();i++){
				this.checkBoxs.put(this.iCount, 
						         new String[]{sr.get(i, optionIdName),
						                      sr.get(i, optionTextName)});
				this.iCount++;
			}
		}
	}

	/**
	 * 取复选框组
	 */
	public HtmlWindow get() throws ErrorMessage {
		CheckBox checkBoxtemp;
		HtmlWindow checkBoxDiv;
		String[] item;
		for(int i=0;i<this.checkBoxs.size();i++){
			item = this.checkBoxs.getByKey(i);
			if(item.length>1){
				checkBoxtemp = new CheckBox(name,
											item[0],
											this.sHomeUrl,
											item[1],
											this.type);
				checkBoxtemp.setInGroup(true);
				checkBoxDiv=checkBoxtemp.get();
				this.checkBoxGroup.put(checkBoxDiv);
				this.width += checkBoxDiv.getLength();
			}
		}
		this.checkBoxGroup.setLength(this.width);
		
		HtmlValue value=new HtmlValue(this.name+"value",","+this.name+"value","");
		this.checkBoxGroup.put(value);
		
		return this.checkBoxGroup;
	}
}
